home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / util / gnu / oleo_src.lha / src / parse.tab.c < prev    next >
C/C++ Source or Header  |  1992-07-27  |  45KB  |  1,572 lines

  1. #ifndef lint
  2. char yysccsid[] = "@(#)yaccpar    1.5 (Berkeley) 06/03/90";
  3. #endif
  4. #line 2 "parse.y"
  5. /*    Copyright (C) 1990 Free Software Foundation, Inc.
  6.  
  7. This file is part of Oleo, the GNU Spreadsheet.
  8.  
  9. Oleo is free software; you can redistribute it and/or modify
  10. it under the terms of the GNU General Public License as published by
  11. the Free Software Foundation; either version 1, or (at your option)
  12. any later version.
  13.  
  14. Oleo is distributed in the hope that it will be useful,
  15. but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17. GNU General Public License for more details.
  18.  
  19. You should have received a copy of the GNU General Public License
  20. along with Oleo; see the file COPYING.  If not, write to
  21. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  22. #line 41 "parse.y"
  23. #include "funcdef.h"
  24.  
  25. #include <ctype.h>
  26.  
  27. #define obstack_chunk_alloc ck_malloc
  28. #define obstack_chunk_free free
  29. #include "obstack.h"
  30. #include "sysdef.h"
  31.  
  32. #include "global.h"
  33. #include "errors.h"
  34. #include "node.h"
  35. #include "eval.h"
  36.  
  37. extern void *find_or_make_var EXT2(char *,int);
  38.  
  39. int yylex EXT0();
  40.  
  41. void yyerror EXT1(char *);
  42.  
  43. void *parse_hash;
  44. extern VOIDSTAR hash_find();
  45.  
  46. /* This table contains a list of the infix single-char functions */
  47. unsigned char fnin[] = {
  48.     SUM, DIFF, DIV, PROD, MOD, /* AND, OR, */ POW, EQUAL, IF, CONCAT, 0
  49. };
  50.  
  51. #define YYSTYPE _y_y_s_t_y_p_e
  52. typedef struct node *YYSTYPE;
  53. YYSTYPE make_list EXT2(YYSTYPE, YYSTYPE);
  54. YYSTYPE parse_return;
  55.  
  56. char *instr;
  57. int parse_error = 0;
  58. extern struct obstack tmp_mem;
  59.  
  60. #line 61 "y.tab.c"
  61. #define NE 257
  62. #define LE 258
  63. #define GE 259
  64. #define NEG 260
  65. #define L_CELL 261
  66. #define L_RANGE 262
  67. #define L_VAR 263
  68. #define L_CONST 264
  69. #define L_FN0 265
  70. #define L_FN1 266
  71. #define L_FN2 267
  72. #define L_FN3 268
  73. #define L_FN4 269
  74. #define L_FNN 270
  75. #define L_FN1R 271
  76. #define L_FN2R 272
  77. #define L_FN3R 273
  78. #define L_FN4R 274
  79. #define L_FNNR 275
  80. #define L_LE 276
  81. #define L_NE 277
  82. #define L_GE 278
  83. #define YYERRCODE 256
  84. short yylhs[] = {                                        -1,
  85.     0,    0,    1,    1,    1,    1,    1,    1,    1,    1,
  86.     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  87.     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  88.     1,    1,    1,    1,    1,    1,    1,    1,    3,    3,
  89.     5,    5,    4,    4,    2,    2,
  90. };
  91. short yylen[] = {                                         2,
  92.     1,    1,    1,    1,    3,    4,    6,    8,   10,    4,
  93.     4,    4,    6,    6,    8,    8,    8,    8,    4,    5,
  94.     3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
  95.     3,    3,    3,    2,    2,    3,    3,    2,    1,    3,
  96.     1,    1,    1,    3,    1,    1,
  97. };
  98. short yydefred[] = {                                      0,
  99.     2,    0,    0,   45,   46,    3,    0,    0,    0,    0,
  100.     0,    0,    0,    0,    0,    0,    0,    0,    0,    4,
  101.    34,   35,    0,    0,    0,    0,    0,    0,    0,    0,
  102.     0,    0,   38,    0,    0,    0,    0,    0,    0,    0,
  103.     0,    0,    0,    0,    0,    0,    0,    0,    5,    0,
  104.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  105.     0,   41,    0,    0,   43,   37,   36,    0,    0,    0,
  106.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  107.     0,    6,    0,    0,    0,   10,    0,   11,   12,    0,
  108.     0,    0,    0,   19,    0,    0,    0,    0,    0,    0,
  109.     0,    0,    0,    0,   44,    0,    7,    0,    0,   13,
  110.     0,   14,    0,    0,    0,    0,    0,    0,    0,    0,
  111.     0,    8,    0,   15,   16,   17,   18,    0,    9,
  112. };
  113. short yydgoto[] = {                                      18,
  114.    63,   20,   55,   64,   65,
  115. };
  116. short yysindex[] = {                                    -33,
  117.     0,  208,  208,    0,    0,    0,  -36,  -30,  -22,  -14,
  118.    -9,   -8,   -7,   -6,   -5,   -4,  160,    0,  943,    0,
  119.     0,    0,    6,  208,  208,  208,  208,  208, -254, -248,
  120.  -233,  176,    0,  240,  208,  208,  208,  208,  208,  208,
  121.   208,  208,  208,  208,  208,  208,  208,  208,    0,  474,
  122.   485,  515,  543,  943,  -39,    8,   12,   -3,   21,   26,
  123.    36,    0,  943,  -38,    0,    0,    0,  554,  970,  981,
  124.   981,  -26,  -26,  -26,  -26,  157,  157,  -57,  -57,  -57,
  125.   -57,    0,  208,  208,  208,    0,  208,    0,    0,  208,
  126.   208,  208,  208,    0,  176,  208,  581,  608,  619,  943,
  127.   315,  447,  647,  674,    0,  943,    0,  208,  208,    0,
  128.   208,    0,  208,  208,  208,  715,  743,  781,  808,  847,
  129.   874,    0,  208,    0,    0,    0,    0,  901,    0,
  130. };
  131. short yyrindex[] = {                                      0,
  132.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  133.     0,    0,    0,    0,    0,    0,    0,    0,   92,    0,
  134.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  135.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  136.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  137.     0,    0,    0,  -21,    0,    0,    0,    0,    0,    0,
  138.     0,    0,  -19,    0,    0,    0,    0,    0,   28,  118,
  139.   145,   67,  116,  127,  134,   79,   88,    1,   13,   40,
  140.    52,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  141.     0,    0,    0,    0,    0,    0,    0,    0,    0,  -17,
  142.     0,    0,    0,    0,    0,  143,    0,    0,    0,    0,
  143.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  144.     0,    0,    0,    0,    0,    0,    0,    0,    0,
  145. };
  146. short yygindex[] = {                                      0,
  147.  1053,    0,    0,    0,    9,
  148. };
  149. #define YYTABLESIZE 1240
  150. short yytable[] = {                                       3,
  151.    30,   86,   94,   23,   87,   95,   17,   56,   57,   24,
  152.    47,    2,   31,   58,   59,   45,   43,   25,   44,   39,
  153.    46,   42,   39,   40,   42,   26,   40,   21,   60,   61,
  154.    27,   28,   29,   30,   31,   32,   48,   30,   30,   32,
  155.    90,   30,   30,   30,   30,   30,   49,   30,   88,   31,
  156.    31,   33,   89,   31,   31,   31,   31,   31,   30,   31,
  157.    30,   30,   30,   30,   91,   21,   22,   48,   21,   92,
  158.    31,   21,   31,   31,   31,   31,   32,   32,   28,   93,
  159.    32,   32,   32,   32,   32,   21,   32,   29,   33,   33,
  160.    21,    1,   33,   33,   33,   33,   33,   32,   33,   32,
  161.    32,   32,   32,  105,   22,    0,    0,   22,    0,   33,
  162.    22,   33,   33,   33,   33,   23,   28,   24,    0,   28,
  163.     0,   28,   28,   28,   22,   29,   26,   22,   29,   22,
  164.    29,   29,   29,   27,    0,    0,   28,    0,   28,   28,
  165.    28,   28,   20,    0,   25,   29,    0,   29,   29,   29,
  166.    29,    0,    0,   23,    0,   24,   23,    0,   24,   23,
  167.     0,   24,    0,    0,   26,    0,    0,   26,    0,    0,
  168.    26,   27,    0,   23,   27,   24,   23,   27,   23,    0,
  169.    24,    0,   25,   20,   26,   25,   20,   26,   25,   26,
  170.     0,   27,    3,   47,   27,    0,   27,    0,   45,   17,
  171.    20,    0,   25,   46,    2,    0,    0,   25,    3,    0,
  172.     0,    0,    0,    0,    0,   17,    0,    0,    0,    0,
  173.     2,    0,    1,    0,    0,    0,    0,    4,    0,    5,
  174.     6,    7,    8,    9,   10,   11,   12,   13,   14,   15,
  175.     3,   16,    0,    0,    0,    0,    0,   17,    0,    0,
  176.    48,    0,    2,    0,    0,    0,   30,   30,   30,   30,
  177.     0,    0,    0,    0,    0,    0,    0,    0,   31,   31,
  178.    31,   31,    0,    0,    0,    0,   47,   36,    0,    0,
  179.    67,   45,   43,   21,   44,    0,   46,    0,    0,    0,
  180.     0,    0,    0,    0,    0,   32,   32,   32,   32,   39,
  181.    37,   41,   35,    0,    0,    0,    0,   33,   33,   33,
  182.    33,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  183.     0,    0,   22,   22,    0,    0,    0,    0,    0,    0,
  184.     0,    0,    0,   48,   28,   28,   28,   28,    0,    0,
  185.     0,    0,    0,   29,   29,   29,   29,    0,    0,    0,
  186.     0,   47,   36,    0,    0,  110,   45,   43,  111,   44,
  187.     0,   46,    0,    0,    0,    0,    0,    0,    0,    0,
  188.     0,   23,   23,   24,   39,   37,   41,   35,    0,    0,
  189.     0,    0,   26,   26,    0,    0,    0,    0,    0,   27,
  190.    27,    0,    0,    0,    0,    0,    0,    0,   20,    0,
  191.    25,    0,    0,    0,    0,    0,    0,    0,   48,    0,
  192.     0,    0,    0,    0,    0,   33,    0,    0,    0,    0,
  193.     4,    0,    5,    6,    7,    8,    9,   10,   11,   12,
  194.    13,   14,   15,    0,   16,    0,    4,   62,    5,    6,
  195.     7,    8,    9,   10,   11,   12,   13,   14,   15,    0,
  196.    16,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  197.     0,    0,    0,    0,    0,    0,    0,    0,    4,    0,
  198.     5,    6,    7,    8,    9,   10,   11,   12,   13,   14,
  199.    15,    0,   16,   47,   36,    0,    0,  112,   45,   43,
  200.   113,   44,    0,   46,    0,   66,   38,   40,   42,    0,
  201.     0,    0,    0,    0,    0,    0,   39,   37,   41,   35,
  202.    47,   36,    0,    0,   82,   45,   43,    0,   44,    0,
  203.    46,   47,   36,    0,    0,    0,   45,   43,   83,   44,
  204.     0,   46,    0,   39,   37,   41,   35,    0,    0,    0,
  205.    48,    0,    0,    0,   39,   37,   41,   35,    0,    0,
  206.     0,   47,   36,    0,    0,    0,   45,   43,   84,   44,
  207.     0,   46,    0,    0,    0,    0,    0,   48,    0,    0,
  208.     0,   38,   40,   42,   39,   37,   41,   35,   48,   47,
  209.    36,    0,    0,    0,   45,   43,   85,   44,    0,   46,
  210.    47,   36,    0,    0,    0,   45,   43,    0,   44,    0,
  211.    46,    0,   39,   37,   41,   35,    0,    0,   48,    0,
  212.     0,   96,    0,   39,   37,   41,   35,   47,   36,    0,
  213.     0,  107,   45,   43,    0,   44,    0,   46,    0,    0,
  214.     0,    0,    0,    0,    0,    0,   48,    0,    0,    0,
  215.    39,   37,   41,   35,   47,   36,    0,   48,    0,   45,
  216.    43,  108,   44,    0,   46,   47,   36,    0,    0,    0,
  217.    45,   43,  109,   44,    0,   46,    0,   39,   37,   41,
  218.    35,    0,    0,    0,   48,    0,    0,    0,   39,   37,
  219.    41,   35,    0,   47,   36,    0,    0,    0,   45,   43,
  220.   114,   44,    0,   46,    0,    0,    0,    0,    0,    0,
  221.     0,   48,    0,   38,   40,   42,   39,   37,   41,   35,
  222.    47,   36,   48,    0,    0,   45,   43,  115,   44,    0,
  223.    46,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  224.    38,   40,   42,   39,   37,   41,   35,    0,    0,    0,
  225.    48,   38,   40,   42,    0,    0,    0,    0,    0,    0,
  226.     0,   47,   36,    0,    0,  122,   45,   43,    0,   44,
  227.     0,   46,    0,    0,    0,    0,    0,   48,    0,    0,
  228.     0,   38,   40,   42,   39,   37,   41,   35,    0,   47,
  229.    36,    0,    0,    0,   45,   43,  123,   44,    0,   46,
  230.     0,    0,    0,    0,    0,    0,    0,    0,    0,   38,
  231.    40,   42,   39,   37,   41,   35,    0,    0,   48,    0,
  232.    38,   40,   42,    0,    0,    0,    0,   47,   36,    0,
  233.     0,  124,   45,   43,    0,   44,    0,   46,    0,    0,
  234.     0,    0,    0,    0,    0,    0,   48,   38,   40,   42,
  235.    39,   37,   41,   35,   47,   36,    0,    0,  125,   45,
  236.    43,    0,   44,    0,   46,    0,    0,    0,    0,    0,
  237.     0,    0,    0,    0,   38,   40,   42,   39,   37,   41,
  238.    35,    0,    0,    0,   48,   38,   40,   42,    0,    0,
  239.     0,    0,    0,   47,   36,    0,    0,  126,   45,   43,
  240.     0,   44,    0,   46,    0,    0,    0,    0,    0,    0,
  241.     0,   48,    0,   38,   40,   42,   39,   37,   41,   35,
  242.    47,   36,    0,    0,  127,   45,   43,    0,   44,    0,
  243.    46,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  244.    38,   40,   42,   39,   37,   41,   35,   47,   36,    0,
  245.    48,  129,   45,   43,    0,   44,    0,   46,    0,    0,
  246.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  247.    39,   37,   41,   35,    0,    0,    0,   48,    0,    0,
  248.     0,   38,   40,   42,    0,    0,    0,    0,    0,   47,
  249.    36,    0,    0,    0,   45,   43,    0,   44,    0,   46,
  250.     0,    0,    0,    0,   48,    0,    0,    0,    0,   38,
  251.    40,   42,   39,   37,   41,   35,   47,    0,    0,    0,
  252.     0,   45,   43,    0,   44,    0,   46,   47,    0,    0,
  253.     0,    0,   45,   43,    0,   44,    0,   46,    0,   39,
  254.    37,   41,    0,    0,    0,    0,   48,   38,   40,   42,
  255.    39,    0,   41,    0,    0,    0,    0,    0,    0,    0,
  256.     0,    0,   19,    0,   21,   22,    0,    0,    0,    0,
  257.     0,    0,    0,   48,   38,   40,   42,    0,    0,   34,
  258.     0,    0,    0,    0,   48,    0,   50,   51,   52,   53,
  259.    54,    0,    0,    0,    0,    0,    0,   68,   69,   70,
  260.    71,   72,   73,   74,   75,   76,   77,   78,   79,   80,
  261.    81,    0,    0,   38,   40,   42,    0,    0,    0,    0,
  262.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  263.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  264.    38,   40,   42,    0,    0,   97,   98,   99,    0,  100,
  265.     0,    0,  101,  102,  103,  104,    0,    0,  106,    0,
  266.     0,    0,    0,    0,    0,    0,    0,   38,   40,   42,
  267.   116,  117,    0,  118,    0,  119,  120,  121,    0,    0,
  268.     0,    0,    0,    0,    0,  128,    0,    0,    0,    0,
  269.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  270.     0,    0,    0,    0,    0,    0,    0,    0,    0,   38,
  271.    40,   42,    0,    0,    0,    0,    0,    0,    0,    0,
  272.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  273.     0,    0,    0,    0,    0,    0,   38,   40,   42,    0,
  274.     0,    0,    0,    0,    0,    0,    0,    0,   40,   42,
  275. };
  276. short yycheck[] = {                                      33,
  277.     0,   41,   41,   40,   44,   44,   40,  262,  263,   40,
  278.    37,   45,    0,  262,  263,   42,   43,   40,   45,   41,
  279.    47,   41,   44,   41,   44,   40,   44,    0,  262,  263,
  280.    40,   40,   40,   40,   40,   40,   94,   37,   38,    0,
  281.    44,   41,   42,   43,   44,   45,   41,   47,   41,   37,
  282.    38,    0,   41,   41,   42,   43,   44,   45,   58,   47,
  283.    60,   61,   62,   63,   44,   38,    0,   94,   41,   44,
  284.    58,   44,   60,   61,   62,   63,   37,   38,    0,   44,
  285.    41,   42,   43,   44,   45,   58,   47,    0,   37,   38,
  286.    63,    0,   41,   42,   43,   44,   45,   58,   47,   60,
  287.    61,   62,   63,   95,   38,   -1,   -1,   41,   -1,   58,
  288.    44,   60,   61,   62,   63,    0,   38,    0,   -1,   41,
  289.    -1,   43,   44,   45,   58,   38,    0,   61,   41,   63,
  290.    43,   44,   45,    0,   -1,   -1,   58,   -1,   60,   61,
  291.    62,   63,    0,   -1,    0,   58,   -1,   60,   61,   62,
  292.    63,   -1,   -1,   38,   -1,   38,   41,   -1,   41,   44,
  293.    -1,   44,   -1,   -1,   38,   -1,   -1,   41,   -1,   -1,
  294.    44,   38,   -1,   58,   41,   58,   61,   44,   63,   -1,
  295.    63,   -1,   38,   41,   58,   41,   44,   61,   44,   63,
  296.    -1,   58,   33,   37,   61,   -1,   63,   -1,   42,   40,
  297.    58,   -1,   58,   47,   45,   -1,   -1,   63,   33,   -1,
  298.    -1,   -1,   -1,   -1,   -1,   40,   -1,   -1,   -1,   -1,
  299.    45,   -1,  256,   -1,   -1,   -1,   -1,  261,   -1,  263,
  300.   264,  265,  266,  267,  268,  269,  270,  271,  272,  273,
  301.    33,  275,   -1,   -1,   -1,   -1,   -1,   40,   -1,   -1,
  302.    94,   -1,   45,   -1,   -1,   -1,  256,  257,  258,  259,
  303.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  256,  257,
  304.   258,  259,   -1,   -1,   -1,   -1,   37,   38,   -1,   -1,
  305.    41,   42,   43,  256,   45,   -1,   47,   -1,   -1,   -1,
  306.    -1,   -1,   -1,   -1,   -1,  256,  257,  258,  259,   60,
  307.    61,   62,   63,   -1,   -1,   -1,   -1,  256,  257,  258,
  308.   259,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  309.    -1,   -1,  256,  257,   -1,   -1,   -1,   -1,   -1,   -1,
  310.    -1,   -1,   -1,   94,  256,  257,  258,  259,   -1,   -1,
  311.    -1,   -1,   -1,  256,  257,  258,  259,   -1,   -1,   -1,
  312.    -1,   37,   38,   -1,   -1,   41,   42,   43,   44,   45,
  313.    -1,   47,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  314.    -1,  256,  257,  256,   60,   61,   62,   63,   -1,   -1,
  315.    -1,   -1,  256,  257,   -1,   -1,   -1,   -1,   -1,  256,
  316.   257,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,
  317.   256,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   94,   -1,
  318.    -1,   -1,   -1,   -1,   -1,  256,   -1,   -1,   -1,   -1,
  319.   261,   -1,  263,  264,  265,  266,  267,  268,  269,  270,
  320.   271,  272,  273,   -1,  275,   -1,  261,  262,  263,  264,
  321.   265,  266,  267,  268,  269,  270,  271,  272,  273,   -1,
  322.   275,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  323.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  261,   -1,
  324.   263,  264,  265,  266,  267,  268,  269,  270,  271,  272,
  325.   273,   -1,  275,   37,   38,   -1,   -1,   41,   42,   43,
  326.    44,   45,   -1,   47,   -1,  256,  257,  258,  259,   -1,
  327.    -1,   -1,   -1,   -1,   -1,   -1,   60,   61,   62,   63,
  328.    37,   38,   -1,   -1,   41,   42,   43,   -1,   45,   -1,
  329.    47,   37,   38,   -1,   -1,   -1,   42,   43,   44,   45,
  330.    -1,   47,   -1,   60,   61,   62,   63,   -1,   -1,   -1,
  331.    94,   -1,   -1,   -1,   60,   61,   62,   63,   -1,   -1,
  332.    -1,   37,   38,   -1,   -1,   -1,   42,   43,   44,   45,
  333.    -1,   47,   -1,   -1,   -1,   -1,   -1,   94,   -1,   -1,
  334.    -1,  257,  258,  259,   60,   61,   62,   63,   94,   37,
  335.    38,   -1,   -1,   -1,   42,   43,   44,   45,   -1,   47,
  336.    37,   38,   -1,   -1,   -1,   42,   43,   -1,   45,   -1,
  337.    47,   -1,   60,   61,   62,   63,   -1,   -1,   94,   -1,
  338.    -1,   58,   -1,   60,   61,   62,   63,   37,   38,   -1,
  339.    -1,   41,   42,   43,   -1,   45,   -1,   47,   -1,   -1,
  340.    -1,   -1,   -1,   -1,   -1,   -1,   94,   -1,   -1,   -1,
  341.    60,   61,   62,   63,   37,   38,   -1,   94,   -1,   42,
  342.    43,   44,   45,   -1,   47,   37,   38,   -1,   -1,   -1,
  343.    42,   43,   44,   45,   -1,   47,   -1,   60,   61,   62,
  344.    63,   -1,   -1,   -1,   94,   -1,   -1,   -1,   60,   61,
  345.    62,   63,   -1,   37,   38,   -1,   -1,   -1,   42,   43,
  346.    44,   45,   -1,   47,   -1,   -1,   -1,   -1,   -1,   -1,
  347.    -1,   94,   -1,  257,  258,  259,   60,   61,   62,   63,
  348.    37,   38,   94,   -1,   -1,   42,   43,   44,   45,   -1,
  349.    47,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  350.   257,  258,  259,   60,   61,   62,   63,   -1,   -1,   -1,
  351.    94,  257,  258,  259,   -1,   -1,   -1,   -1,   -1,   -1,
  352.    -1,   37,   38,   -1,   -1,   41,   42,   43,   -1,   45,
  353.    -1,   47,   -1,   -1,   -1,   -1,   -1,   94,   -1,   -1,
  354.    -1,  257,  258,  259,   60,   61,   62,   63,   -1,   37,
  355.    38,   -1,   -1,   -1,   42,   43,   44,   45,   -1,   47,
  356.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  257,
  357.   258,  259,   60,   61,   62,   63,   -1,   -1,   94,   -1,
  358.   257,  258,  259,   -1,   -1,   -1,   -1,   37,   38,   -1,
  359.    -1,   41,   42,   43,   -1,   45,   -1,   47,   -1,   -1,
  360.    -1,   -1,   -1,   -1,   -1,   -1,   94,  257,  258,  259,
  361.    60,   61,   62,   63,   37,   38,   -1,   -1,   41,   42,
  362.    43,   -1,   45,   -1,   47,   -1,   -1,   -1,   -1,   -1,
  363.    -1,   -1,   -1,   -1,  257,  258,  259,   60,   61,   62,
  364.    63,   -1,   -1,   -1,   94,  257,  258,  259,   -1,   -1,
  365.    -1,   -1,   -1,   37,   38,   -1,   -1,   41,   42,   43,
  366.    -1,   45,   -1,   47,   -1,   -1,   -1,   -1,   -1,   -1,
  367.    -1,   94,   -1,  257,  258,  259,   60,   61,   62,   63,
  368.    37,   38,   -1,   -1,   41,   42,   43,   -1,   45,   -1,
  369.    47,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  370.   257,  258,  259,   60,   61,   62,   63,   37,   38,   -1,
  371.    94,   41,   42,   43,   -1,   45,   -1,   47,   -1,   -1,
  372.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  373.    60,   61,   62,   63,   -1,   -1,   -1,   94,   -1,   -1,
  374.    -1,  257,  258,  259,   -1,   -1,   -1,   -1,   -1,   37,
  375.    38,   -1,   -1,   -1,   42,   43,   -1,   45,   -1,   47,
  376.    -1,   -1,   -1,   -1,   94,   -1,   -1,   -1,   -1,  257,
  377.   258,  259,   60,   61,   62,   63,   37,   -1,   -1,   -1,
  378.    -1,   42,   43,   -1,   45,   -1,   47,   37,   -1,   -1,
  379.    -1,   -1,   42,   43,   -1,   45,   -1,   47,   -1,   60,
  380.    61,   62,   -1,   -1,   -1,   -1,   94,  257,  258,  259,
  381.    60,   -1,   62,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  382.    -1,   -1,    0,   -1,    2,    3,   -1,   -1,   -1,   -1,
  383.    -1,   -1,   -1,   94,  257,  258,  259,   -1,   -1,   17,
  384.    -1,   -1,   -1,   -1,   94,   -1,   24,   25,   26,   27,
  385.    28,   -1,   -1,   -1,   -1,   -1,   -1,   35,   36,   37,
  386.    38,   39,   40,   41,   42,   43,   44,   45,   46,   47,
  387.    48,   -1,   -1,  257,  258,  259,   -1,   -1,   -1,   -1,
  388.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  389.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  390.   257,  258,  259,   -1,   -1,   83,   84,   85,   -1,   87,
  391.    -1,   -1,   90,   91,   92,   93,   -1,   -1,   96,   -1,
  392.    -1,   -1,   -1,   -1,   -1,   -1,   -1,  257,  258,  259,
  393.   108,  109,   -1,  111,   -1,  113,  114,  115,   -1,   -1,
  394.    -1,   -1,   -1,   -1,   -1,  123,   -1,   -1,   -1,   -1,
  395.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  396.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  257,
  397.   258,  259,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  398.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  399.    -1,   -1,   -1,   -1,   -1,   -1,  257,  258,  259,   -1,
  400.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  258,  259,
  401. };
  402. #define YYFINAL 18
  403. #ifndef YYDEBUG
  404. #define YYDEBUG 0
  405. #endif
  406. #define YYMAXTOKEN 278
  407. #if YYDEBUG
  408. char *yyname[] = {
  409. "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  410. "'!'",0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,
  411. 0,0,0,0,0,"':'",0,"'<'","'='","'>'","'?'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  412. 0,0,0,0,0,0,0,0,0,0,0,"'^'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  413. 0,0,0,"'|'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  414. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  415. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  416. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"NE","LE","GE","NEG","L_CELL","L_RANGE",
  417. "L_VAR","L_CONST","L_FN0","L_FN1","L_FN2","L_FN3","L_FN4","L_FNN","L_FN1R",
  418. "L_FN2R","L_FN3R","L_FN4R","L_FNNR","L_LE","L_NE","L_GE",
  419. };
  420. char *yyrule[] = {
  421. "$accept : line",
  422. "line : exp",
  423. "line : error",
  424. "exp : L_CONST",
  425. "exp : cell",
  426. "exp : L_FN0 '(' ')'",
  427. "exp : L_FN1 '(' exp ')'",
  428. "exp : L_FN2 '(' exp ',' exp ')'",
  429. "exp : L_FN3 '(' exp ',' exp ',' exp ')'",
  430. "exp : L_FN4 '(' exp ',' exp ',' exp ',' exp ')'",
  431. "exp : L_FNN '(' exp_list ')'",
  432. "exp : L_FN1R '(' L_RANGE ')'",
  433. "exp : L_FN1R '(' L_VAR ')'",
  434. "exp : L_FN2R '(' L_RANGE ',' exp ')'",
  435. "exp : L_FN2R '(' L_VAR ',' exp ')'",
  436. "exp : L_FN2R '(' L_RANGE ',' exp ',' exp ')'",
  437. "exp : L_FN2R '(' L_VAR ',' exp ',' exp ')'",
  438. "exp : L_FN3R '(' L_RANGE ',' exp ',' exp ')'",
  439. "exp : L_FN3R '(' L_VAR ',' exp ',' exp ')'",
  440. "exp : L_FNNR '(' range_exp_list ')'",
  441. "exp : exp '?' exp ':' exp",
  442. "exp : exp '&' exp",
  443. "exp : exp '<' exp",
  444. "exp : exp LE exp",
  445. "exp : exp '=' exp",
  446. "exp : exp NE exp",
  447. "exp : exp '>' exp",
  448. "exp : exp GE exp",
  449. "exp : exp '+' exp",
  450. "exp : exp '-' exp",
  451. "exp : exp '*' exp",
  452. "exp : exp '/' exp",
  453. "exp : exp '%' exp",
  454. "exp : exp '^' exp",
  455. "exp : '-' exp",
  456. "exp : '!' exp",
  457. "exp : '(' exp ')'",
  458. "exp : '(' exp error",
  459. "exp : '(' error",
  460. "exp_list : exp",
  461. "exp_list : exp_list ',' exp",
  462. "range_exp : L_RANGE",
  463. "range_exp : exp",
  464. "range_exp_list : range_exp",
  465. "range_exp_list : range_exp_list ',' range_exp",
  466. "cell : L_CELL",
  467. "cell : L_VAR",
  468. };
  469. #endif
  470. #ifndef YYSTYPE
  471. typedef int YYSTYPE;
  472. #endif
  473. #define yyclearin (yychar=(-1))
  474. #define yyerrok (yyerrflag=0)
  475. #ifndef YYSTACKSIZE
  476. #ifdef YYMAXDEPTH
  477. #define YYSTACKSIZE YYMAXDEPTH
  478. #else
  479. #define YYSTACKSIZE 300
  480. #endif
  481. #endif
  482. int yydebug;
  483. int yynerrs;
  484. int yyerrflag;
  485. int yychar;
  486. short *yyssp;
  487. YYSTYPE *yyvsp;
  488. YYSTYPE yyval;
  489. YYSTYPE yylval;
  490. #define yystacksize YYSTACKSIZE
  491. short yyss[YYSTACKSIZE];
  492. YYSTYPE yyvs[YYSTACKSIZE];
  493. #line 280 "parse.y"
  494.  
  495. void
  496. yyerror FUN1(char *, s)
  497. {
  498.     if(!parse_error)
  499.         parse_error=PARSE_ERR;
  500. }
  501.  
  502. YYSTYPE
  503. make_list FUN2(YYSTYPE, car, YYSTYPE, cdr)
  504. {
  505.     YYSTYPE ret;
  506.  
  507.     ret=(YYSTYPE)obstack_alloc(&tmp_mem,sizeof(*ret));
  508.     ret->comp_value = 0;
  509.     ret->n_x.v_subs[0]=car;
  510.     ret->n_x.v_subs[1]=cdr;
  511.     return ret;
  512. }
  513.  
  514. #define ERROR -1
  515.  
  516. extern struct node *yylval;
  517.  
  518. unsigned char parse_cell_or_range EXT2(char **,struct rng *);
  519.  
  520. int
  521. yylex FUN0()
  522. {
  523.     int ch;
  524.     struct node *new;
  525.     int isflt;
  526.     char *begin;
  527.     char *tmp_str;
  528.     unsigned char byte_value;
  529.     int n;
  530.  
  531.     /* unsigned char *ptr; */
  532.     int nn;
  533.     struct function *fp;
  534.     int tmp_ch;
  535.  
  536. #ifdef TEST
  537.     if(!instr)
  538.         return ERROR;
  539. #endif
  540.     while(isspace(*instr))
  541.         instr++;
  542.     ch = *instr++;
  543.     if(ch=='(' || ch==',' || ch==')')
  544.         return ch;
  545.  
  546.     new=(struct node *)obstack_alloc(&tmp_mem,sizeof(struct node));
  547.     new->add_byte=0;
  548.     new->sub_value=0;
  549.     switch(ch) {
  550.     case 0:
  551.         return 0;
  552.  
  553.     case '0': case '1': case '2': case '3': case '4': case '5': case '6':
  554.     case '7': case '8': case '9': case '.':
  555.         isflt = (ch=='.');
  556.  
  557.         begin=instr-1;
  558.         tmp_str=instr;
  559.  
  560.         while(isdigit(*tmp_str) || (!isflt && *tmp_str=='.' && ++isflt))
  561.             tmp_str++;
  562.         if(*tmp_str=='e' || *tmp_str=='E') {
  563.             isflt=1;
  564.             tmp_str++;
  565.             if(*tmp_str=='-' || *tmp_str=='+')
  566.                 tmp_str++;
  567.             while(isdigit(*tmp_str))
  568.                 tmp_str++;
  569.         }
  570.         if(isflt) {
  571.             new->n_x.v_float=astof((char **)(&begin));
  572.             byte_value=CONST_FLT;
  573.         } else {
  574.             new->n_x.v_int=astol((char **)(&begin));
  575.             if(begin!=tmp_str) {
  576.                 begin=instr-1;
  577.                 new->n_x.v_float=astof((char **)(&begin));
  578.                 byte_value=CONST_FLT;
  579.             } else
  580.                 byte_value=CONST_INT;
  581.         }
  582.         ch=L_CONST;
  583.         instr=begin;
  584.         break;
  585.  
  586.     case '"':
  587.         begin=instr;
  588.         while(*instr && *instr!='"') {
  589.             if(*instr=='\\' && instr[1])
  590.                 instr++;
  591.             instr++;
  592.         }
  593.         if(!*instr) {
  594.             parse_error=NO_QUOTE;
  595.             return ERROR;
  596.         }
  597.         tmp_str=new->n_x.v_string=(char *)ck_malloc(1+instr-begin);
  598.         while(begin!=instr) {
  599.             unsigned char n;
  600.  
  601.             if(*begin=='\\') {
  602.                 begin++;
  603.                 if(begin[0]>='0' && begin[0]<='7') {
  604.                     if(begin[1]>='0' && begin[1]<='7') {
  605.                         if(begin[2]>='0' && begin[2]<='7') {
  606.                             n=(begin[2]-'0') + (010 * (begin[1]-'0')) + ( 0100 * (begin[0]-'0'));
  607.                             begin+=3;
  608.                         } else {
  609.                             n=(begin[1]-'0') + (010 * (begin[0]-'0'));
  610.                             begin+=2;
  611.                         }
  612.                     } else {
  613.                         n=begin[0]-'0';
  614.                         begin++;
  615.                     }
  616.                 } else
  617.                     n= *begin++;
  618.                 *tmp_str++= n;
  619.             } else
  620.                 *tmp_str++= *begin++;
  621.         }
  622.         *tmp_str='\0';
  623.         instr++;
  624.         byte_value=CONST_STR;
  625.         ch=L_CONST;
  626.         break;
  627.  
  628.     case '+':    case '-':
  629.  
  630.     case '*':    case '/':    case '%':    case '&':
  631.     case '|':    case '^':    case '=':
  632.  
  633.     case '?':
  634.     {
  635.         unsigned char *ptr;
  636.  
  637.         for(ptr= fnin;*ptr;ptr++)
  638.             if(the_funs[*ptr].fn_str[0]==ch)
  639.                 break;
  640. #ifdef TEST
  641.         if(!*ptr)
  642.             panic("Can't find fnin[] entry for '%c'",ch);
  643. #endif
  644.         byte_value= *ptr;
  645.     }
  646.         break;
  647.  
  648.     case ':':
  649.         byte_value=IF;
  650.         break;
  651.  
  652.     case '!':
  653.     case '<':
  654.     case '>':
  655.         if(*instr!='=') {
  656.             byte_value = (ch=='<') ? LESS : (ch=='>') ? GREATER : NOT;
  657.             break;
  658.         }
  659.         instr++;
  660.         byte_value = (ch=='<') ? LESSEQ : (ch=='>') ? GREATEQ : NOTEQUAL;
  661.         ch = (ch=='<') ? LE : (ch=='>') ? GE : NE;
  662.         break;
  663.  
  664. #ifndef A0_REFS
  665.     case '$':
  666.     case '@':
  667. #endif
  668.     case '\'':
  669.     case ';':
  670.     case '[':
  671.     case '\\':
  672.     case ']':
  673.     case '`':
  674.     case '{':
  675.     case '}':
  676.     case '~':
  677.         parse_error=BAD_CHAR;
  678.         return ERROR;
  679.  
  680.     case '#':
  681.         begin=instr-1;
  682.         while(*instr && (isalnum(*instr) || *instr=='_'))
  683.             instr++;
  684.         ch= *instr;
  685.         *instr=0;
  686.         if(!stricmp(begin,tname))
  687.             byte_value=F_TRUE;
  688.         else if(!stricmp(begin,fname))
  689.             byte_value=F_FALSE;
  690.         else if(!stricmp(begin,iname) && (begin[4]==0 || !stricmp(begin+4,"inity")))
  691.             byte_value=CONST_INF;
  692.         else if(!stricmp(begin,mname) ||
  693.             !stricmp(begin,"#ninf"))
  694.             byte_value=CONST_NINF;
  695.         else if(!stricmp(begin,nname) ||
  696.             !stricmp(begin,"#nan"))
  697.             byte_value=CONST_NAN;
  698.         else {
  699.             for(n=1;n<=ERR_MAX;n++)
  700.                 if(!stricmp(begin,ename[n]))
  701.                     break;
  702.             if(n>ERR_MAX)
  703.                 n=BAD_CHAR;
  704.             new->n_x.v_int=n;
  705.             byte_value=CONST_ERR;
  706.         }
  707.         *instr=ch;
  708.         ch=L_CONST;
  709.         break;
  710.  
  711.     default:
  712.         begin=instr-1;
  713.         byte_value=parse_cell_or_range(&begin,&(new->n_x.v_rng));
  714.         if(byte_value) {
  715.             if((byte_value& ~0x3)==R_CELL)
  716.                 ch=L_CELL;
  717.             else
  718.                 ch=L_RANGE;
  719.             instr=begin;
  720.             break;
  721.         }
  722.  
  723.         while(*instr && (isalpha(*instr) || isdigit(*instr) || *instr=='_'))
  724.             instr++;
  725.  
  726.         n=instr-begin;
  727.         while(isspace(*instr))
  728.             instr++;
  729.  
  730. #ifndef A0_REFS
  731.         if(*instr!='(') {
  732. #endif
  733.             ch=L_VAR;
  734.             byte_value=VAR;
  735.             new->n_x.v_var=find_or_make_var(begin,n);
  736.             break;
  737. #ifndef A0_REFS
  738.         }
  739. #endif
  740. #ifdef A0_REFS
  741.  
  742.     case '@':
  743.         begin=instr;
  744.         while(*instr && (isalpha(*instr) || isdigit(*instr) || *instr=='_'))
  745.             instr++;
  746.         n=instr-begin;
  747. #endif
  748.         tmp_ch=begin[n];
  749.         begin[n]='\0';
  750.         fp=hash_find(parse_hash,begin);
  751.         begin[n]=tmp_ch;
  752.         byte_value= ERROR;
  753.         if(!fp) {
  754.             parse_error=BAD_FUNC;
  755.             return ERROR;
  756.         }
  757.  
  758.         if(fp>=the_funs && fp<=&the_funs[USR1])
  759.             byte_value=fp-the_funs;
  760.         else {
  761.             for(nn=0;nn<n_usr_funs;nn++) {
  762.                 if(fp>=&usr_funs[nn][0] && fp<=&usr_funs[nn][usr_n_funs[nn]]) {
  763.                     byte_value=USR1+nn;
  764.                     new->sub_value=fp-&usr_funs[nn][0];
  765.                     break;
  766.                 }
  767.             }
  768. #ifdef TEST
  769.             if(nn==n_usr_funs) {
  770.                 error_msg("Couln't turn fp into a ##");
  771.                 parse_error=BAD_FUNC;
  772.                 return ERROR;
  773.             }
  774. #endif
  775.         }
  776.  
  777.         if(fp->fn_argn&X_J)
  778.             ch= byte_value==F_IF ? L_FN3 : L_FN2;
  779.         else if(fp->fn_argt[0]=='R' || fp->fn_argt[0]=='E')
  780.             ch=L_FN1R-1+fp->fn_argn-X_A0;
  781.         else
  782.             ch=L_FN0 + fp->fn_argn-X_A0;
  783.  
  784.         break;
  785.     }
  786.     /* new->node_type=ch; */
  787.     new->comp_value=byte_value;
  788.     yylval=new;
  789.     return ch;
  790. }
  791.  
  792. /* Return value is
  793.     0 if it doesn't look like a cell or a range,
  794.     R_CELL if it is a cell (ptr now points past the characters, lr and lc hold the row and col of the cell)
  795.     RANGE if it is a range (ptr points past the chars)
  796.  */
  797. unsigned char
  798. parse_cell_or_range FUN2(char **,ptr, struct rng *,retp)
  799. {
  800. #ifdef A0_REFS
  801.     unsigned tmpc,tmpr;
  802.     char *p;
  803.     int abz = ROWREL|COLREL;
  804.     int str_to_col EXT1(char **);
  805.  
  806.     p= *ptr;
  807.     tmpc=0;
  808.     if(*p=='$') {
  809.         abz-=COLREL;
  810.         p++;
  811.     }
  812.     if(!isalpha(*p))
  813.         return 0;
  814.     tmpc=str_to_col(&p);
  815.     if(tmpc<MIN_COL || tmpc>MAX_COL)
  816.         return 0;
  817.     if(*p=='$') {
  818.         abz-=ROWREL;
  819.         p++;
  820.     }
  821.     if(!isdigit(*p))
  822.         return 0;
  823.     for(tmpr=0;isdigit(*p);p++)
  824.         tmpr=tmpr*10 + *p - '0';
  825.  
  826.     if(tmpr<MIN_ROW || tmpr>MAX_ROW)
  827.         return 0;
  828.  
  829.     if(*p==':' || *p=='.') {
  830.         unsigned tmpc1,tmpr1;
  831.  
  832.         abz = ((abz&COLREL) ? LCREL : 0)|((abz&ROWREL) ? LRREL : 0)|HRREL|HCREL;
  833.         p++;
  834.         if(*p=='$') {
  835.             abz-=HCREL;
  836.             p++;
  837.         }
  838.         if(!isalpha(*p))
  839.             return 0;
  840.         tmpc1=str_to_col(&p);
  841.         if(tmpc1<MIN_COL || tmpc1>MAX_COL)
  842.             return 0;
  843.         if(*p=='$') {
  844.             abz-=HRREL;
  845.             p++;
  846.         }
  847.         if(!isdigit(*p))
  848.             return 0;
  849.         for(tmpr1=0;isdigit(*p);p++)
  850.             tmpr1=tmpr1*10 + *p - '0';
  851.         if(tmpr1<MIN_ROW || tmpr1>MAX_ROW)
  852.             return 0;
  853.  
  854.         if(tmpr<tmpr1) {
  855.             retp->lr=tmpr;
  856.             retp->hr=tmpr1;
  857.         } else {
  858.             retp->lr=tmpr1;
  859.             retp->hr=tmpr;
  860.         }
  861.         if(tmpc<tmpc1) {
  862.             retp->lc=tmpc;
  863.             retp->hc=tmpc1;
  864.         } else {
  865.             retp->lc=tmpc1;
  866.             retp->hc=tmpc;
  867.         }
  868.         *ptr= p;
  869.         return RANGE | abz;
  870.     }
  871.     retp->lr = retp->hr = tmpr;
  872.     retp->lc = retp->hc = tmpc;
  873.     *ptr=p;
  874.     return R_CELL | abz;
  875. #else
  876.     char *p;
  877.     unsigned char retr;
  878.     unsigned char retc;
  879.     int ended;
  880.     long num;
  881.     CELLREF tmp;
  882.  
  883.     extern CELLREF cur_row, cur_col;
  884.  
  885. #define CK_ABS_R(x)    if((x)<MIN_ROW || (x)>MAX_ROW)    \
  886.                 return 0;        \
  887.             else
  888.  
  889. #define CK_REL_R(x)    if(   ((x)>0 && MAX_ROW-(x)<cur_row)    \
  890.                || ((x)<0 && MIN_ROW-(x)>cur_row))    \
  891.                 return 0;            \
  892.             else
  893.  
  894. #define CK_ABS_C(x)    if((x)<MIN_COL || (x)>MAX_COL)    \
  895.                 return 0;        \
  896.             else
  897.  
  898. #define CK_REL_C(x)    if(   ((x)>0 && MAX_COL-(x)<cur_col)    \
  899.                || ((x)<0 && MIN_COL-(x)>cur_col))    \
  900.                 return 0;            \
  901.             else
  902.  
  903. #define MAYBEREL(p) (*(p)=='[' && (isdigit((p)[1]) || (((p)[1]=='+' || (p)[1]=='-') && isdigit((p)[2]))))
  904.  
  905.     p= *ptr;
  906.     retr=0;
  907.     retc=0;
  908.     ended=0;
  909.     while(ended==0) {
  910.         switch(*p) {
  911.         case 'r':
  912.         case 'R':
  913.             if(retr) {
  914.                 ended++;
  915.                 break;
  916.             }
  917.             p++;
  918.             retr=R_CELL;
  919.             if(isdigit(*p)) {
  920.                 num=astol(&p);
  921.                 CK_ABS_R(num);
  922.                 retp->lr= retp->hr=num;
  923.             } else if(MAYBEREL(p)) {
  924.                 p++;
  925.                 num=astol(&p);
  926.                 CK_REL_R(num);
  927.                 retp->lr= retp->hr=num+cur_row;
  928.                 retr|=ROWREL;
  929.                 if(*p==':') {
  930.                     retr=RANGE|LRREL|HRREL;
  931.                     p++;
  932.                     num=astol(&p);
  933.                     CK_REL_R(num);
  934.                     retp->hr=num+cur_row;
  935.                 }
  936.                 if(*p++!=']')
  937.                     return 0;
  938.             } else if(retc || *p=='c' || *p=='C') {
  939.                 retr|=ROWREL;
  940.                 retp->lr= retp->hr=cur_row;
  941.             } else
  942.                 return 0;
  943.             if(*p==':' && retr!=(RANGE|LRREL|HRREL)) {
  944.                 retr= (retr&ROWREL) ? RANGE|LRREL : RANGE;
  945.                 p++;
  946.                 if(isdigit(*p)) {
  947.                     num=astol(&p);
  948.                     CK_ABS_R(num);
  949.                      retp->hr=num;
  950.                 } else if(MAYBEREL(p)) {
  951.                     p++;
  952.                     num=astol(&p);
  953.                     CK_REL_R(num);
  954.                     retp->hr=num+cur_row;
  955.                     retr|=HRREL;
  956.                     if(*p++!=']')
  957.                         return 0;
  958.                 } else
  959.                     return 0;
  960.             }
  961.  
  962.             if(retc)
  963.                 ended++;
  964.             break;
  965.  
  966.         case 'c':
  967.         case 'C':
  968.             if(retc) {
  969.                 ended++;
  970.                 break;
  971.             }
  972.             p++;
  973.             retc=R_CELL;
  974.             if(isdigit(*p)) {
  975.                 num=astol(&p);
  976.                 CK_ABS_C(num);
  977.                 retp->lc= retp->hc=num;
  978.             } else if(MAYBEREL(p)) {
  979.                 p++;
  980.                 num=astol(&p);
  981.                 CK_REL_C(num);
  982.                 retp->lc= retp->hc=num+cur_col;
  983.                 retc|=COLREL;
  984.                 if(*p==':') {
  985.                     retc=RANGE|LCREL|HCREL;
  986.                     p++;
  987.                     num=astol(&p);
  988.                     CK_REL_C(num);
  989.                     retp->hc=num+cur_col;
  990.                 }
  991.                 if(*p++!=']')
  992.                     return 0;
  993.             } else if(retr || *p=='r' || *p=='R') {
  994.                 retc|=COLREL;
  995.                 retp->lc= retp->hc=cur_col;
  996.             } else
  997.                 return 0;
  998.             if(*p==':' && retc!=(RANGE|LCREL|HCREL)) {
  999.                 retc= (retc&COLREL) ? RANGE|LCREL : RANGE;
  1000.                 p++;
  1001.                 if(isdigit(*p)) {
  1002.                     num=astol(&p);
  1003.                     CK_ABS_C(num);
  1004.                      retp->hc=num;
  1005.                 } else if(MAYBEREL(p)) {
  1006.                     p++;
  1007.                     num=astol(&p);
  1008.                     CK_REL_C(num);
  1009.                     retp->hc=num+cur_col;
  1010.                     retc|=HCREL;
  1011.                     if(*p++!=']')
  1012.                         return 0;
  1013.                 } else
  1014.                     return 0;
  1015.             }
  1016.  
  1017.             if(retr)
  1018.                 ended++;
  1019.             break;
  1020.         default:
  1021.             if(retr) {
  1022.                 *ptr=p;
  1023.                 retp->lc=MIN_COL;
  1024.                 retp->hc=MAX_COL;
  1025.                 if((retr|ROWREL)==(R_CELL|ROWREL))
  1026.                     return (retr&ROWREL) ? (RANGE|LRREL|HRREL) : RANGE;
  1027.                 else
  1028.                     return retr;
  1029.             } else if(retc) {
  1030.                 *ptr=p;
  1031.                 retp->lr=MIN_ROW;
  1032.                 retp->hr=MAX_COL;
  1033.                 if((retc|COLREL)==(R_CELL|COLREL))
  1034.                     return (retc&COLREL) ? (RANGE|LCREL|HCREL) : RANGE;
  1035.                 else
  1036.                     return retc;
  1037.             }
  1038.             return 0;
  1039.         }
  1040.     }
  1041.     if(!retr || !retc)
  1042.         return 0;
  1043.     *ptr=p;
  1044.     if(retp->lr>retp->hr)
  1045.         tmp=retp->lr,retp->lr=retp->hr,retp->hr=tmp;
  1046.     if(retp->lc>retp->hc)
  1047.         tmp=retp->lc,retp->lc=retp->hc,retp->hc=tmp;
  1048.  
  1049.     if((retr|ROWREL)==(R_CELL|ROWREL)) {
  1050.         if((retc|COLREL)==(R_CELL|COLREL))
  1051.             return retr|retc;
  1052.         return (retr&ROWREL) ? (retc|LRREL|HRREL) : retc;
  1053.     }
  1054.     if((retc|COLREL)==(R_CELL|COLREL))
  1055.         return (retc&COLREL) ? (retr|LCREL|HCREL) : retr;
  1056.     return retr|retc;
  1057. #endif
  1058. }
  1059.  
  1060. #ifdef A0_REFS
  1061. int
  1062. str_to_col FUN1(char **,str)
  1063. {
  1064.     int ret;
  1065.     char c,cc,ccc,cccc;
  1066.  
  1067.     ret=0;
  1068.     c=str[0][0];
  1069.     if(!isalpha((cc=str[0][1]))) {
  1070.         (*str)++;
  1071.         return MIN_COL + (isupper(c) ? c-'A' : c-'a');
  1072.     }
  1073.     if(!isalpha((ccc=str[0][2]))) {
  1074.         (*str)+=2;
  1075.         return MIN_COL+26 + (isupper(c) ? c-'A' : c-'a')*26 + (isupper(cc) ? cc-'A' : cc-'a');
  1076.     }
  1077. #if MAX_COL>702
  1078.     if(!isalpha((cccc=str[0][3]))) {
  1079.         (*str)+=3;
  1080.         return MIN_COL+702 + (isupper(c) ? c-'A' : c-'a')*26*26 + (isupper(cc) ? cc-'A' : cc-'a')*26 + (isupper(ccc) ? ccc-'A' : ccc-'a');
  1081.     }
  1082.     if(!isalpha(str[0][4])) {
  1083.         (*str)+=4;
  1084.         return MIN_COL+18278 + (isupper(c) ? c-'A' : c-'a')*26*26*26 + (isupper(cc) ? cc-'A' : cc-'a')*26*26 + (isupper(ccc) ? ccc-'A' : ccc-'a')*26 + (isupper(cccc) ? cccc-'A' : cccc-'a');
  1085.     }
  1086. #endif
  1087.     return 0;
  1088. }
  1089. #endif
  1090. #line 1091 "y.tab.c"
  1091. #define YYABORT goto yyabort
  1092. #define YYACCEPT goto yyaccept
  1093. #define YYERROR goto yyerrlab
  1094. int
  1095. yyparse()
  1096. {
  1097.     register int yym, yyn, yystate;
  1098. #if YYDEBUG
  1099.     register char *yys;
  1100.     extern char *getenv();
  1101.  
  1102.     if (yys = getenv("YYDEBUG"))
  1103.     {
  1104.         yyn = *yys;
  1105.         if (yyn >= '0' && yyn <= '9')
  1106.             yydebug = yyn - '0';
  1107.     }
  1108. #endif
  1109.  
  1110.     yynerrs = 0;
  1111.     yyerrflag = 0;
  1112.     yychar = (-1);
  1113.  
  1114.     yyssp = yyss;
  1115.     yyvsp = yyvs;
  1116.     *yyssp = yystate = 0;
  1117.  
  1118. yyloop:
  1119.     if (yyn = yydefred[yystate]) goto yyreduce;
  1120.     if (yychar < 0)
  1121.     {
  1122.         if ((yychar = yylex()) < 0) yychar = 0;
  1123. #if YYDEBUG
  1124.         if (yydebug)
  1125.         {
  1126.             yys = 0;
  1127.             if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
  1128.             if (!yys) yys = "illegal-symbol";
  1129.             printf("yydebug: state %d, reading %d (%s)\n", yystate,
  1130.                     yychar, yys);
  1131.         }
  1132. #endif
  1133.     }
  1134.     if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
  1135.             yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
  1136.     {
  1137. #if YYDEBUG
  1138.         if (yydebug)
  1139.             printf("yydebug: state %d, shifting to state %d\n",
  1140.                     yystate, yytable[yyn]);
  1141. #endif
  1142.         if (yyssp >= yyss + yystacksize - 1)
  1143.         {
  1144.             goto yyoverflow;
  1145.         }
  1146.         *++yyssp = yystate = yytable[yyn];
  1147.         *++yyvsp = yylval;
  1148.         yychar = (-1);
  1149.         if (yyerrflag > 0)  --yyerrflag;
  1150.         goto yyloop;
  1151.     }
  1152.     if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
  1153.             yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
  1154.     {
  1155.         yyn = yytable[yyn];
  1156.         goto yyreduce;
  1157.     }
  1158.     if (yyerrflag) goto yyinrecovery;
  1159. #ifdef lint
  1160.     goto yynewerror;
  1161. #endif
  1162. yynewerror:
  1163.     yyerror("syntax error");
  1164. #ifdef lint
  1165.     goto yyerrlab;
  1166. #endif
  1167. yyerrlab:
  1168.     ++yynerrs;
  1169. yyinrecovery:
  1170.     if (yyerrflag < 3)
  1171.     {
  1172.         yyerrflag = 3;
  1173.         for (;;)
  1174.         {
  1175.             if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
  1176.                     yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
  1177.             {
  1178. #if YYDEBUG
  1179.                 if (yydebug)
  1180.                     printf("yydebug: state %d, error recovery shifting\
  1181.  to state %d\n", *yyssp, yytable[yyn]);
  1182. #endif
  1183.                 if (yyssp >= yyss + yystacksize - 1)
  1184.                 {
  1185.                     goto yyoverflow;
  1186.                 }
  1187.                 *++yyssp = yystate = yytable[yyn];
  1188.                 *++yyvsp = yylval;
  1189.                 goto yyloop;
  1190.             }
  1191.             else
  1192.             {
  1193. #if YYDEBUG
  1194.                 if (yydebug)
  1195.                     printf("yydebug: error recovery discarding state %d\n",
  1196.                             *yyssp);
  1197. #endif
  1198.                 if (yyssp <= yyss) goto yyabort;
  1199.                 --yyssp;
  1200.                 --yyvsp;
  1201.             }
  1202.         }
  1203.     }
  1204.     else
  1205.     {
  1206.         if (yychar == 0) goto yyabort;
  1207. #if YYDEBUG
  1208.         if (yydebug)
  1209.         {
  1210.             yys = 0;
  1211.             if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
  1212.             if (!yys) yys = "illegal-symbol";
  1213.             printf("yydebug: state %d, error recovery discards token %d (%s)\n",
  1214.                     yystate, yychar, yys);
  1215.         }
  1216. #endif
  1217.         yychar = (-1);
  1218.         goto yyloop;
  1219.     }
  1220. yyreduce:
  1221. #if YYDEBUG
  1222.     if (yydebug)
  1223.         printf("yydebug: state %d, reducing by rule %d (%s)\n",
  1224.                 yystate, yyn, yyrule[yyn]);
  1225. #endif
  1226.     yym = yylen[yyn];
  1227.     yyval = yyvsp[1-yym];
  1228.     switch (yyn)
  1229.     {
  1230. case 1:
  1231. #line 81 "parse.y"
  1232. { parse_return=yyvsp[0]; }
  1233. break;
  1234. case 2:
  1235. #line 82 "parse.y"
  1236. {
  1237.         if(!parse_error)
  1238.             parse_error=PARSE_ERR;
  1239.         parse_return=0; }
  1240. break;
  1241. case 5:
  1242. #line 90 "parse.y"
  1243. {
  1244.         yyval=yyvsp[-2]; }
  1245. break;
  1246. case 6:
  1247. #line 92 "parse.y"
  1248. {
  1249.         (yyvsp[-3])->n_x.v_subs[0]=yyvsp[-1];
  1250.         (yyvsp[-3])->n_x.v_subs[1]=(struct node *)0;
  1251.         yyval=yyvsp[-3]; }
  1252. break;
  1253. case 7:
  1254. #line 96 "parse.y"
  1255. {
  1256.         (yyvsp[-5])->n_x.v_subs[0]=yyvsp[-3];
  1257.         (yyvsp[-5])->n_x.v_subs[1]=yyvsp[-1];
  1258.         yyval=yyvsp[-5]; }
  1259. break;
  1260. case 8:
  1261. #line 100 "parse.y"
  1262. {
  1263.         (yyvsp[-7])->n_x.v_subs[0]=make_list(yyvsp[-5],yyvsp[-3]);
  1264.          (yyvsp[-7])->n_x.v_subs[1]=yyvsp[-1];
  1265.          yyval=yyvsp[-7];}
  1266. break;
  1267. case 9:
  1268. #line 104 "parse.y"
  1269. {
  1270.         (yyvsp[-9])->n_x.v_subs[0]=make_list(yyvsp[-7],yyvsp[-5]);
  1271.          (yyvsp[-9])->n_x.v_subs[1]=make_list(yyvsp[-3],yyvsp[-1]);
  1272.          yyval=yyvsp[-9];}
  1273. break;
  1274. case 10:
  1275. #line 108 "parse.y"
  1276. {
  1277.         (yyvsp[-3])->n_x.v_subs[0]=(struct node *)0;
  1278.         (yyvsp[-3])->n_x.v_subs[1]=yyvsp[-1];
  1279.         yyval=yyvsp[-3]; }
  1280. break;
  1281. case 11:
  1282. #line 112 "parse.y"
  1283. {
  1284.         yyvsp[-3]->n_x.v_subs[0]=yyvsp[-1];
  1285.         yyval=yyvsp[-3]; }
  1286. break;
  1287. case 12:
  1288. #line 115 "parse.y"
  1289. {
  1290.         yyvsp[-3]->n_x.v_subs[0]=yyvsp[-1];
  1291.         yyval=yyvsp[-3]; }
  1292. break;
  1293. case 13:
  1294. #line 119 "parse.y"
  1295. {
  1296.         yyvsp[-5]->n_x.v_subs[0]=yyvsp[-3];
  1297.         yyvsp[-5]->n_x.v_subs[1]=yyvsp[-1];
  1298.         yyval=yyvsp[-5]; }
  1299. break;
  1300. case 14:
  1301. #line 123 "parse.y"
  1302. {
  1303.         yyvsp[-5]->n_x.v_subs[0]=yyvsp[-3];
  1304.         yyvsp[-5]->n_x.v_subs[1]=yyvsp[-1];
  1305.         yyval=yyvsp[-5]; }
  1306. break;
  1307. case 15:
  1308. #line 129 "parse.y"
  1309. {
  1310.         if(yyvsp[-7]->comp_value!=F_INDEX)
  1311.             parse_error=PARSE_ERR;
  1312.         yyvsp[-7]->comp_value=F_INDEX2;
  1313.         yyvsp[-7]->n_x.v_subs[0]=make_list(yyvsp[-5],yyvsp[-3]);
  1314.         yyvsp[-7]->n_x.v_subs[1]=yyvsp[-1];
  1315.         yyval=yyvsp[-7]; }
  1316. break;
  1317. case 16:
  1318. #line 136 "parse.y"
  1319. {
  1320.         if(yyvsp[-7]->comp_value!=F_INDEX)
  1321.             parse_error=PARSE_ERR;
  1322.         yyvsp[-7]->comp_value=F_INDEX2;
  1323.         yyvsp[-7]->n_x.v_subs[0]=make_list(yyvsp[-5],yyvsp[-3]);
  1324.         yyvsp[-7]->n_x.v_subs[1]=yyvsp[-1];
  1325.         yyval=yyvsp[-7]; }
  1326. break;
  1327. case 17:
  1328. #line 144 "parse.y"
  1329. {
  1330.         (yyvsp[-7])->n_x.v_subs[0]=make_list(yyvsp[-5],yyvsp[-3]);
  1331.          (yyvsp[-7])->n_x.v_subs[1]=yyvsp[-1];
  1332.          yyval=yyvsp[-7];}
  1333. break;
  1334. case 18:
  1335. #line 148 "parse.y"
  1336. {
  1337.         (yyvsp[-7])->n_x.v_subs[0]=make_list(yyvsp[-5],yyvsp[-3]);
  1338.          (yyvsp[-7])->n_x.v_subs[1]=yyvsp[-1];
  1339.          yyval=yyvsp[-7];}
  1340. break;
  1341. case 19:
  1342. #line 153 "parse.y"
  1343. {
  1344.         (yyvsp[-3])->n_x.v_subs[0]=(struct node *)0;
  1345.         (yyvsp[-3])->n_x.v_subs[1]=yyvsp[-1];
  1346.         yyval=yyvsp[-3]; }
  1347. break;
  1348. case 20:
  1349. #line 157 "parse.y"
  1350. {
  1351.         yyvsp[-3]->comp_value=IF;
  1352.         yyvsp[-3]->n_x.v_subs[0]=yyvsp[-1];
  1353.         yyvsp[-3]->n_x.v_subs[1]=yyvsp[0];
  1354.         yyvsp[-1]->n_x.v_subs[0]=yyvsp[-4];
  1355.         yyvsp[-1]->n_x.v_subs[1]=yyvsp[-2];
  1356.         yyval=yyvsp[-3]; }
  1357. break;
  1358. case 21:
  1359. #line 168 "parse.y"
  1360. {
  1361.         /* $2->n_x.v_subs[0]=make_list($1,make_list($3,0));
  1362.         $2->n_x.v_subs[1]=0; */
  1363.  
  1364.         yyvsp[-1]->n_x.v_subs[0]=yyvsp[-2];
  1365.         yyvsp[-1]->n_x.v_subs[1]=yyvsp[0];
  1366.         yyval = yyvsp[-1]; }
  1367. break;
  1368. case 22:
  1369. #line 175 "parse.y"
  1370. {
  1371.         yyvsp[-1]->n_x.v_subs[0]=yyvsp[-2];
  1372.         yyvsp[-1]->n_x.v_subs[1]=yyvsp[0];
  1373.         yyval = yyvsp[-1]; }
  1374. break;
  1375. case 23:
  1376. #line 179 "parse.y"
  1377. {
  1378.         yyvsp[-1]->n_x.v_subs[0]=yyvsp[-2];
  1379.         yyvsp[-1]->n_x.v_subs[1]=yyvsp[0];
  1380.         yyval = yyvsp[-1]; }
  1381. break;
  1382. case 24:
  1383. #line 183 "parse.y"
  1384. {
  1385.         yyvsp[-1]->n_x.v_subs[0]=yyvsp[-2];
  1386.         yyvsp[-1]->n_x.v_subs[1]=yyvsp[0];
  1387.         yyval = yyvsp[-1]; }
  1388. break;
  1389. case 25:
  1390. #line 187 "parse.y"
  1391. {
  1392.         yyvsp[-1]->n_x.v_subs[0]=yyvsp[-2];
  1393.         yyvsp[-1]->n_x.v_subs[1]=yyvsp[0];
  1394.         yyval = yyvsp[-1]; }
  1395. break;
  1396. case 26:
  1397. #line 191 "parse.y"
  1398. {
  1399.         yyvsp[-1]->n_x.v_subs[0]=yyvsp[-2];
  1400.         yyvsp[-1]->n_x.v_subs[1]=yyvsp[0];
  1401.         yyval = yyvsp[-1]; }
  1402. break;
  1403. case 27:
  1404. #line 195 "parse.y"
  1405. {
  1406.         yyvsp[-1]->n_x.v_subs[0]=yyvsp[-2];
  1407.         yyvsp[-1]->n_x.v_subs[1]=yyvsp[0];
  1408.         yyval = yyvsp[-1]; }
  1409. break;
  1410. case 28:
  1411. #line 199 "parse.y"
  1412. {
  1413.         yyvsp[-1]->n_x.v_subs[0]=yyvsp[-2];
  1414.         yyvsp[-1]->n_x.v_subs[1]=yyvsp[0];
  1415.         yyval = yyvsp[-1]; }
  1416. break;
  1417. case 29:
  1418. #line 203 "parse.y"
  1419. {
  1420.         yyvsp[-1]->n_x.v_subs[0]=yyvsp[-2];
  1421.         yyvsp[-1]->n_x.v_subs[1]=yyvsp[0];
  1422.         yyval = yyvsp[-1]; }
  1423. break;
  1424. case 30:
  1425. #line 207 "parse.y"
  1426. {
  1427.         yyvsp[-1]->n_x.v_subs[0]=yyvsp[-2];
  1428.         yyvsp[-1]->n_x.v_subs[1]=yyvsp[0];
  1429.         yyval = yyvsp[-1]; }
  1430. break;
  1431. case 31:
  1432. #line 211 "parse.y"
  1433. {
  1434.         yyvsp[-1]->n_x.v_subs[0]=yyvsp[-2];
  1435.         yyvsp[-1]->n_x.v_subs[1]=yyvsp[0];
  1436.         yyval = yyvsp[-1]; }
  1437. break;
  1438. case 32:
  1439. #line 215 "parse.y"
  1440. {
  1441.         yyvsp[-1]->n_x.v_subs[0]=yyvsp[-2];
  1442.         yyvsp[-1]->n_x.v_subs[1]=yyvsp[0];
  1443.         yyval = yyvsp[-1]; }
  1444. break;
  1445. case 33:
  1446. #line 219 "parse.y"
  1447. {
  1448.         yyvsp[-1]->n_x.v_subs[0]=yyvsp[-2];
  1449.         yyvsp[-1]->n_x.v_subs[1]=yyvsp[0];
  1450.         yyval = yyvsp[-1]; }
  1451. break;
  1452. case 34:
  1453. #line 223 "parse.y"
  1454. {
  1455.         if(yyvsp[0]->comp_value==CONST_FLT) {
  1456.             yyvsp[0]->n_x.v_float= -(yyvsp[0]->n_x.v_float);
  1457.             /* free($1); */
  1458.             yyval=yyvsp[0];
  1459.         } else if(yyvsp[0]->comp_value==CONST_INT) {
  1460.             yyvsp[0]->n_x.v_int= -(yyvsp[0]->n_x.v_int);
  1461.             /* free($1); */
  1462.             yyval=yyvsp[0];
  1463.         } else {
  1464.             yyvsp[-1]->comp_value = NEGATE;
  1465.             yyvsp[-1]->n_x.v_subs[0]=yyvsp[0];
  1466.             yyvsp[-1]->n_x.v_subs[1]=(struct node *)0;
  1467.             yyval = yyvsp[-1];
  1468.         } }
  1469. break;
  1470. case 35:
  1471. #line 238 "parse.y"
  1472. {
  1473.         yyvsp[-1]->n_x.v_subs[0]=yyvsp[0];
  1474.         yyvsp[-1]->n_x.v_subs[1]=(struct node *)0;
  1475.         yyval = yyvsp[-1]; }
  1476. break;
  1477. case 36:
  1478. #line 243 "parse.y"
  1479. { yyval = yyvsp[-1]; }
  1480. break;
  1481. case 37:
  1482. #line 244 "parse.y"
  1483. {
  1484.         if(!parse_error)
  1485.             parse_error=NO_CLOSE;
  1486.         }
  1487. break;
  1488. case 38:
  1489. #line 252 "parse.y"
  1490. {
  1491.         if(!parse_error)
  1492.             parse_error=NO_CLOSE;
  1493.         }
  1494. break;
  1495. case 39:
  1496. #line 260 "parse.y"
  1497. { yyval = make_list(yyvsp[0], 0); }
  1498. break;
  1499. case 40:
  1500. #line 262 "parse.y"
  1501. { yyval = make_list(yyvsp[0], yyvsp[-2]); }
  1502. break;
  1503. case 43:
  1504. #line 270 "parse.y"
  1505. { yyval=make_list(yyvsp[0], 0); }
  1506. break;
  1507. case 44:
  1508. #line 272 "parse.y"
  1509. { yyval=make_list(yyvsp[0],yyvsp[-2]); }
  1510. break;
  1511. case 45:
  1512. #line 276 "parse.y"
  1513. { yyval=yyvsp[0]; }
  1514. break;
  1515. #line 1516 "y.tab.c"
  1516.     }
  1517.     yyssp -= yym;
  1518.     yystate = *yyssp;
  1519.     yyvsp -= yym;
  1520.     yym = yylhs[yyn];
  1521.     if (yystate == 0 && yym == 0)
  1522.     {
  1523. #if YYDEBUG
  1524.         if (yydebug)
  1525.             printf("yydebug: after reduction, shifting from state 0 to\
  1526.  state %d\n", YYFINAL);
  1527. #endif
  1528.         yystate = YYFINAL;
  1529.         *++yyssp = YYFINAL;
  1530.         *++yyvsp = yyval;
  1531.         if (yychar < 0)
  1532.         {
  1533.             if ((yychar = yylex()) < 0) yychar = 0;
  1534. #if YYDEBUG
  1535.             if (yydebug)
  1536.             {
  1537.                 yys = 0;
  1538.                 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
  1539.                 if (!yys) yys = "illegal-symbol";
  1540.                 printf("yydebug: state %d, reading %d (%s)\n",
  1541.                         YYFINAL, yychar, yys);
  1542.             }
  1543. #endif
  1544.         }
  1545.         if (yychar == 0) goto yyaccept;
  1546.         goto yyloop;
  1547.     }
  1548.     if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
  1549.             yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
  1550.         yystate = yytable[yyn];
  1551.     else
  1552.         yystate = yydgoto[yym];
  1553. #if YYDEBUG
  1554.     if (yydebug)
  1555.         printf("yydebug: after reduction, shifting from state %d \
  1556. to state %d\n", *yyssp, yystate);
  1557. #endif
  1558.     if (yyssp >= yyss + yystacksize - 1)
  1559.     {
  1560.         goto yyoverflow;
  1561.     }
  1562.     *++yyssp = yystate;
  1563.     *++yyvsp = yyval;
  1564.     goto yyloop;
  1565. yyoverflow:
  1566.     yyerror("yacc stack overflow");
  1567. yyabort:
  1568.     return (1);
  1569. yyaccept:
  1570.     return (0);
  1571. }
  1572.